package top.gytf.unifiedcall.common.detial;

import top.gytf.distools.lifecycle.Manager;
import top.gytf.unifiedcall.model.detail.UnifiedCallPackageDetail;

import java.lang.reflect.Method;
import java.util.Optional;

/**
 * 管理统一调用包描述
 */
public interface UnifiedCallPackageManager extends Manager {
    /**
     * 通过统一调用包名称获取包描述
     * @param name {@link UnifiedCallPackageDetail#getName()}
     * @return 匹配名称的包描述
     */
    Optional<UnifiedCallPackageDetail> findByName(String name);

    /**
     * 通过客户端类获取包描述
     * @param client {@link UnifiedCallPackageDetail#getClients()}
     */
    Optional<UnifiedCallPackageDetail> findByClient(Class<?> client);

    /**
     * 通过API方法获取包描述
     * @param apiMethod API方法
     */
    default Optional<UnifiedCallPackageDetail> findByApiMethod(Method apiMethod) {
        return findByClient(apiMethod.getDeclaringClass());
    }
}
